//
// Created by Poyyo on 2021/5/25.
//

#ifndef ALDS_GRAPHINMATRIXIMPL_H
#define ALDS_GRAPHINMATRIXIMPL_H

#include <iostream>
#include <vector>
#include "Vertex.h"

using std::cin, std::cout, std::vector, std::endl;

class GraphInMatrixImpl {

private:
    /**
     * 图的邻接矩阵
     */
    vector<vector<int>> M;

    /**
     * 图的结点
     */
    vector<Vertex> vertexes;

public:
    /**
     * 构造函数
     * @param ver
     */
    GraphInMatrixImpl();

    void ToString();

    const vector<vector<int>> &getM() const;

    void setM(const vector<vector<int>> &m);

    const vector<Vertex> &getVertexes() const;

    void setVertexes(const vector<Vertex> &vertexes);

    void Visit(int id);

    void  Select(int id);

    vector<int> GetLinkedVertexes(int id);

    /**
     * 返回邻接矩阵中点id相邻的下一个点的id
     * @param id
     * @return
     */
    int GetNext(int id);

};


#endif //ALDS_GRAPHINMATRIXIMPL_H
